﻿using CapaNegocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CapaPresentacion
{
    public partial class frmRegistro_LibroCaja : Form
    {
        
        public int Idtrabajador;
        private bool IsNuevo = false;
        public static string VariableLibrocaja;
        public static string VariableCancelarcuenta;
        private bool IsEditar = false;


        private static frmRegistro_LibroCaja _Instancia;
        public static frmRegistro_LibroCaja GetInstancia()
        {
            if (_Instancia == null)
            {
                _Instancia = new frmRegistro_LibroCaja();
            }
            return _Instancia;
        }

        public void SetPlancontableCaja(string idplancontable, string cuenta, string nombrecuenta)
        {
            this.txtidplancontable.Text = idplancontable;
            this.txtCuenta.Text = cuenta;
            this.txtDenominacion.Text = nombrecuenta;
        }

        public frmRegistro_LibroCaja()
        {
            InitializeComponent();
        }

        //Mostrar Mensaje de Confirmación
        private void MensajeOk(string mensaje)
        {
            MessageBox.Show(mensaje, "Sistema de Ventas", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }


        //Mostrar Mensaje de Error
        private void MensajeError(string mensaje)
        {
            MessageBox.Show(mensaje, "Sistema de Ventas", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        //Limpiar todos los controles del formulario
        private void Limpiar()
        {
            this.txtnum_correlativo.Text = string.Empty;
            this.txtNumero.Text = string.Empty;
            this.txtGlosa.Text = string.Empty;
        }

        //Habilitar los controles del formulario
        private void Habilitar(bool valor)
        {
            this.txtnum_correlativo.ReadOnly = !valor;
            this.txtGlosa.ReadOnly = !valor;
            this.txtHaber.ReadOnly = !valor;
        }

        //Habilitar los botones
        private void Botones()
        {
            if (this.IsNuevo || this.IsEditar) //Alt + 124
            {
                this.Habilitar(true);
                this.btnNuevo.Enabled = false;
                this.btnGuardar.Enabled = true;
                this.btnEditar.Enabled = false;
                this.btnCancelar.Enabled = true;
            }
            else
            {
                this.Habilitar(false);
                this.btnNuevo.Enabled = true;
                this.btnGuardar.Enabled = false;
                this.btnEditar.Enabled = true;
                this.btnCancelar.Enabled = false;
            }

        }

        //Método para ocultar columnas
        private void OcultarColumnas()
        {
            this.dataListado.Columns[0].Visible = false;
            this.dataListado.Columns[1].Visible = false;
            this.dataListado.Columns[8].Visible = false;
        }

        //Método Mostrar
        private void Mostrar()
        {
            this.dataListado.DataSource = NRegistro_LibroCaja.Mostrar();
            this.OcultarColumnas();
            lblTotal.Text = "Total de Registros: " + Convert.ToString(dataListado.Rows.Count);
        }

        //Método BuscarNombre
        private void BuscarNombre()
        {
            this.dataListado.DataSource = NRegistro_LibroCaja.BuscarNombre(this.txtBuscar.Text);
            this.OcultarColumnas();
            lblTotal.Text = "Total de Registros: " + Convert.ToString(dataListado.Rows.Count);
        }

        private void frmRegistro_LibroCaja_Load(object sender, EventArgs e)
        {
            this.Top = 0;
            this.Left = 0;
            this.Mostrar();
            this.Habilitar(false);
            this.Botones();
        }
        private void frmRegistro_LibroCaja_FormClosing(object sender, FormClosingEventArgs e)
        {

            _Instancia = null;
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {

            this.IsNuevo = true;
            this.IsEditar = false;
            this.Botones();
            this.Limpiar();
            this.Habilitar(true);
            this.txtnum_correlativo.Focus();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            if (!this.txtIdLibrocaja.Text.Equals(""))
            {
                this.IsEditar = true;
                this.Botones();
                this.Habilitar(true);
            }
            else
            {
                this.MensajeError("Debe de seleccionar primero el registro a Modificar");
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.IsNuevo = false;
            this.IsEditar = false;
            this.Botones();
            this.Limpiar();
            this.Habilitar(false);
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            frmBuscarProveedorClient form = new frmBuscarProveedorClient();
            VariableCancelarcuenta = txtCuenta.Text;
            form.ShowDialog();

            try
            {
                string rpta = "";
                if (this.txtnum_correlativo.Text == string.Empty)
                {
                    MensajeError("Falta ingresar algunos datos, serán remarcados");
                    errorIcono.SetError(txtnum_correlativo, "Ingrese un Nombre");
                }
                else
                {
                    if (this.IsNuevo)
                    {
                        rpta = NRegistro_LibroCaja.Insertar(
                            Convert.ToInt32(this.txtnum_correlativo.Text),
                            this.dtFecha.Value,
                            this.txtGlosa.Text,
                            Convert.ToInt32(this.txtCodigoLibro.Text),
                            Convert.ToInt32(txtNumero.Text),
                            this.txtDocumento.Text,
                            Convert.ToInt32(this.txtidplancontable.Text),
                            this.txtCuenta.Text,
                            this.txtDenominacion.Text,
                            Convert.ToDecimal(this.txtDebe.Text),
                            Convert.ToDecimal(this.txtHaber.Text),
                            Idtrabajador);
                    }
                    else
                    {
                        rpta = NRegistro_LibroCaja.Editar(
                            Convert.ToInt32(this.txtIdLibrocaja.Text),
                            Convert.ToInt32(this.txtnum_correlativo.Text),
                            this.dtFecha.Value,
                            this.txtGlosa.Text,
                            Convert.ToInt32(this.txtCodigoLibro.Text),
                            Convert.ToInt32(txtNumero.Text),
                            this.txtDocumento.Text,
                            Convert.ToInt32(this.txtidplancontable.Text),
                            this.txtCuenta.Text,
                            this.txtDenominacion.Text,
                            Convert.ToDecimal(this.txtDebe.Text),
                            Convert.ToDecimal(this.txtHaber.Text),
                            Idtrabajador);
                    }

                    if (rpta.Equals("OK"))
                    {
                        if (this.IsNuevo)
                        {
                            this.MensajeOk("Se Insertó de forma correcta el registro");
                        }
                        else
                        {
                            this.MensajeOk("Se Actualizó de forma correcta el registro");
                        }
                    }
                    else
                    {
                        this.MensajeError(rpta);
                    }

                    this.IsNuevo = false;
                    this.IsEditar = false;
                    this.Botones();
                    this.Limpiar();
                    this.Mostrar();


                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }
        }

        private void chkEliminar_CheckedChanged(object sender, EventArgs e)
        {
            if (chkEliminar.Checked)
            {
                this.dataListado.Columns[0].Visible = true;
            }
            else
            {
                this.dataListado.Columns[0].Visible = false;
            }
        }

        private void dataListado_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == dataListado.Columns["Eliminar"].Index)
            {
                DataGridViewCheckBoxCell ChkEliminar = (DataGridViewCheckBoxCell)dataListado.Rows[e.RowIndex].Cells["Eliminar"];
                ChkEliminar.Value = !Convert.ToBoolean(ChkEliminar.Value);
            }
        }

        private void txtBuscar_TextChanged(object sender, EventArgs e)
        {
            this.BuscarNombre();
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                DialogResult Opcion;
                Opcion = MessageBox.Show("Realmente Desea Eliminar los Registros","Sistema de Ventas",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
                 
                if (Opcion == DialogResult.OK)
                {
                    string Codigo;
                    string Rpta = "";

                    foreach (DataGridViewRow row in dataListado.Rows)
                    {
                        if (Convert.ToBoolean(row.Cells[0].Value))
                        {
                            Codigo = Convert.ToString(row.Cells[1].Value);
                            Rpta = NRegistro_LibroCaja.Eliminar(Convert.ToInt32(Codigo));
                            
                            if(Rpta.Equals("OK"))
                            {
                                this.MensajeOk("Se Eliminó Correctamente el registro");
                            }
                            else
                            {
                                this.MensajeError(Rpta);
                            }

                        }
                    }
                    this.Mostrar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }
        }

        private void btnBuscarPcontable_Click(object sender, EventArgs e)
        {
            frmVista_Plan_LibroDiario form = new frmVista_Plan_LibroDiario();
            form.ShowDialog();
        }

        private void txtCuenta_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter))
            {
                frmVista_Plan_LibroCaja form = new frmVista_Plan_LibroCaja();
                VariableLibrocaja = txtCuenta.Text;
                form.ShowDialog();
            }
        }

        private void dataListado_DoubleClick(object sender, EventArgs e)
        {
            this.txtIdLibrocaja.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["idlibrocaja"].Value);
            this.txtnum_correlativo.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["NUMERO CORRELATIVO DEL ASIENTO O CODIGO UNICO DE LA OPERACION"].Value);
            this.dtFecha.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["FECHA DE LA OPERACION"].Value);
            this.txtGlosa.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["GLOSA Y DESCRIPCION DE LA OPERACION"].Value);
            this.txtCodigoLibro.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["CODIGO DEL LIBRO O REGISTRO (TABLA 8)"].Value);
            this.txtNumero.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["NUMERO CORRELATIVO"].Value);
            this.txtDocumento.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["NUMERO DEL DOCUMENTO SUSTENTADO"].Value);
            this.txtidplancontable.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["idplancontable"].Value);
            this.txtCuenta.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["CODIGO"].Value);
            this.txtDenominacion.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["DENOMINACION"].Value);
            this.txtDebe.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["DEBE"].Value);
            this.txtHaber.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["HABER"].Value);
            this.tabControl1.SelectedIndex = 1; 
        }

        private void txtCuenta_TextChanged(object sender, EventArgs e)
        {

        }

       

    }
}
